/*
	将文本信息读入切片，使用切片来改造
*/

package reading_text

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

//改造程序，定义两个新函数
func OpenFile(fileName string) (*os.File, error) {
	fmt.Println("Opening", fileName)
	return os.Open(fileName)
}

//任何错误都会阻止文件关闭，要使用延迟函数调用
func CloseFile(file *os.File) {
	fmt.Println("Closing file")
	file.Close()
}

//函数将返回一个数字数组和错误信息
func GetFloats(fileName string) ([]float64, error) {
	// var numbers [3]float64
	var numbers []float64
	// file, err := os.Open(fileName)
	file, err := OpenFile(fileName)
	if err != nil {
		return numbers, err
	}
	defer CloseFile(file) //即使打开文件错误也要关闭文件

	// i := 0 //跟踪当前索引，以便确定每一行赋值给哪个数组元素
	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		// numbers[i], err = strconv.ParseFloat(scanner.Text(), 64) //将文件中的行字符串转换为float64
		number, err := strconv.ParseFloat(scanner.Text(), 64)
		if err != nil {
			return numbers, err
		}
		// i++
		numbers = append(numbers, number)
	}

	// err = file.Close()
	// defer CloseFile(file)
	if err != nil {
		return numbers, err
	}
	if scanner.Err() != nil {
		return numbers, scanner.Err()
	}

	return numbers, nil
}
